package org.ladybug.service.admin;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Restrictions;
import org.ladybug.dao.DAOService;
import org.ladybug.dao.persistence.Applicazione;
import org.ladybug.dao.persistence.Ruolo;
import org.ladybug.dao.persistence.RuoloApplicUtente;
import org.ladybug.dao.persistence.Utente;

public class AdminServiceImpl implements AdminService {

	
	private DAOService daoService ;
	


	public DAOService getDaoService() {
		return daoService;
	}

	public void setDaoService(DAOService daoService) {
		this.daoService = daoService;
	}
	
	/* (non-Javadoc)
	 * @see org.ladybug.service.AdminService#insertNewUtente(org.ladybug.dao.persistence.Utente)
	 */
	public Serializable insertNewUtente(Utente utente){
		return daoService.save(utente);
	}
	
	public void sospendiUtente(Utente utente){
		utente.setIsSospeso(true);
		daoService.saveOrUpdate(utente);
	}
	
	public Utente findUtenteByNickname(Utente utente){
		Criterion c = Expression.eq("nickname", utente.getNickname());
		DetachedCriteria criteria = DetachedCriteria.forClass(Utente.class);
		criteria.add(c);
		List l =  daoService.findByCriteria(criteria);
		if(l.size()==0){
			return null;
		}
		return (Utente) l.get(0);
	}
	

	public Serializable insertNewRuolo(Ruolo ruolo) {
		return daoService.save(ruolo);
	}

	public Ruolo findRuoloByName(Ruolo ruolo) {
		DetachedCriteria criteria =  DetachedCriteria.forClass(Ruolo.class);
		Criterion criterion = Restrictions.eq("descrizione", ruolo.getDescrizione());
		criteria.add(criterion);
		List ruolos = daoService.findByCriteria((DetachedCriteria) criteria);
		if(ruolos.size()==0){
			return null;
		}
		return (Ruolo) ruolos.get(0);
	}
	
	
	
	public Ruolo findRuoloByName(String roleName) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public void saveOrUpdate(Object entity){
		daoService.saveOrUpdate(entity);
	}
	
	public Ruolo findRuoloByPK(Ruolo ruolo) {
		ruolo = (Ruolo) daoService.get(Ruolo.class, ruolo.getIdRuolo());
		return ruolo;
	}

	public void joinUserApplicationRole(RuoloApplicUtente rau) {
		daoService.saveOrUpdate(rau);
		// TODO Auto-generated method stub
		
	}

	
	
	
	
	
	//---------------------------------- setters and getters
//	private HibernateTemplate getHibernateTemplate() {
//		HibernateTemplate hibernateTemplate = daoService.getHibernateTemplate();
//		return hibernateTemplate;
//	}


}
